-- 优惠券id
local voucherId = ARGV[1]
-- 用户id
local userId = ARGV[2]
-- 订单id
local orderId = ARGV[3]

-- 库存key
local stockKey = "seckill:stock:" .. voucherId
-- 订单key
local orderKey = "seckill:order:" .. voucherId

-- 判断库存是否充足
if(tonumber(redis.call('GET', stockKey)) <= 0) then
    -- 库存不足
    return 1;
end

-- 判断用户是否下单
if(redis.call('SISMEMBER', orderKey, userId) == 1) then
    -- 已经下过单了
    return 2;
end

--扣减库存
redis.call('INCRBY', stockKey, -1);

--将userId存入当前优惠券set集合
redis.call('SADD', orderKey, userId);

-- 发消息到redis消息队列 XADD stream.orders * k1 v1 k2 v2 ...
redis.call('XADD', 'stream.orders', '*', 'voucherId', voucherId, 'userId', userId, 'id', orderId)
return 0; -- 返回结果